#include "../../Headers/UI/typeofroomdialog.h"
#include "ui_typeofroomdialog.h"

#include "../../Headers/DataAccessors/typeofroomdataaccessor.h"
#include "../../Headers/UI/typeofroomaddeditdialog.h"

#include <QSqlTableModel>
#include <QMessageBox>

TypeOfRoomDialog::TypeOfRoomDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::TypeOfRoomDialog)
{
    ui->setupUi(this);

    this->setWindowFlags(Qt::Dialog |
                         Qt::WindowMinimizeButtonHint |
                         Qt::WindowMaximizeButtonHint);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    //connect(this, SIGNAL())

    Update();
}

TypeOfRoomDialog::~TypeOfRoomDialog()
{
    delete ui;
}

/**
  Создать тип комнаты
  */
void TypeOfRoomDialog::on_createButton_clicked()
{
    TypeOfRoomAddEditDialog addDialog;
    addDialog.exec();
    Update();
}

/**
  Изменить тип комнаты
  */
void TypeOfRoomDialog::on_editButton_clicked()
{
    if (checkSelected())
    {
        TypeOfRoomAddEditDialog editDialog(MyUtils::Editing, getCurrentTypeOfRoom());
        editDialog.setWindowTitle(trUtf8("Изменение типа номера"));
        editDialog.exec();
        Update();
    }
}

/**
  Удалить тип комнаты
  */
void TypeOfRoomDialog::on_deleteButton_clicked()
{
    if (checkSelected())
    {
        TypeOfRoom * typeOfRoom = getCurrentTypeOfRoom();
        if (typeOfRoom != NULL)
        {
            QMessageBox message;
            message.setText(trUtf8("Вы действительно хотите удалить тип комнаты ") + typeOfRoom->getName() + trUtf8("?"));
            message.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
            message.setDefaultButton(QMessageBox::Ok);
            int result = message.exec();
            if (result == QMessageBox::Ok)
            {
                TypeOfRoomDataAccessor dataAccessor;
                dataAccessor.deleteTypeOfRoom(*typeOfRoom);
                Update();
            }
        }
        delete typeOfRoom;
    }
}

/**
  Закрыть окно
  */
void TypeOfRoomDialog::on_closeButton_clicked()
{
    this->close();
}

void TypeOfRoomDialog::Update()
{
    TypeOfRoomDataAccessor dataAccessor;
    QSqlTableModel * model = dataAccessor.getTypesOfRoom();
    model->setHeaderData(0, Qt::Horizontal, "id");
    model->setHeaderData(1, Qt::Horizontal, "Название");
    model->setHeaderData(2, Qt::Horizontal, "Количество мест");
    model->setHeaderData(3, Qt::Horizontal, "Цена");
    ui->tableView->setModel(model);
    ui->tableView->hideColumn(0);
    ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
}

TypeOfRoom * TypeOfRoomDialog::getCurrentTypeOfRoom()
{
    int row = ui->tableView->currentIndex().row();
    int id = ui->tableView->model()->data(ui->tableView->model()->index(row, 0)).toInt();
    TypeOfRoomDataAccessor dataAccessor;
    return dataAccessor.getTypeOfRoom(id);
}

bool TypeOfRoomDialog::checkSelected()
{
    if (ui->tableView->currentIndex().isValid())
    {
        return true;
    }
    else
    {
        QMessageBox msg;
        msg.setIcon(QMessageBox::Information);
        msg.setWindowTitle(trUtf8("Ошибка"));
        msg.setText(trUtf8("Пожалуйста выберите запись для того, чтобы изменить её"));
        msg.exec();
        return false;
    }
}

void TypeOfRoomDialog::on_tableView_doubleClicked(const QModelIndex &index)
{
    on_editButton_clicked();
}

void TypeOfRoomDialog::on_action_triggered()
{
    on_deleteButton_clicked();
}

void TypeOfRoomDialog::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_Delete:
        on_deleteButton_clicked();
        break;
    case Qt::Key_Escape:
        this->close();
        break;
    }
}
